/**
 **************************************************************************************************************************
 * 
 **************************************************************************************************************************
 * @file RBShader.h
 **************************************************************************************************************************/

#pragma once

#ifdef  HEADER_MSG
#pragma HEADER_MSG(RBShader.h)
#endif


/**************************************************************************************************************************
 * Includes
 **************************************************************************************************************************/
#include "RBEffectVariable.h"
#include "RBSamplerState.h"

/**************************************************************************************************************************
 * Forward declarations
 **************************************************************************************************************************/
enum EShaderType
{
    EST_VS = 0,
    EST_PS,
    EST_GS,
    EST_CS,
    EST_HS,
    EST_COUNT
};

/**************************************************************************************************************************
 * Classes
 **************************************************************************************************************************/
struct RBShaderCommandBuffer
{
    RBShaderCommandBuffer() 
    : Native(NULL)
    {}
    void* Native;
    std::vector<RBShaderConstantBufferVariable> ConstantBufferVariables;

};
struct RBShader
{
    RBShader() 
    : Native(NULL)
    {}

    void*                                       Native;
    
    RBString                                    EntryPoint;
    RBString                                    Profile;
    
    std::vector<RBShaderCommandBuffer>          CommandBuffers;
    std::vector<RBShaderResourceViewVariable>   ResourceViewVariables;
    std::vector<RBShaderSamplerVariable>        SamplerVariables;

};